#-*- coding: utf-8 -*-
from pandac.PandaModules import *
from random import randrange
import pmcore.basecom

# Компонент обязательно должен наследоваться от BaseComponent
class TestComponent (pmcore.basecom.BaseComponent):
    # Единственный обязательный параметр
    name = "Base Sample"
    
    # Если мы хотим внести изменения в конфигурацию панды (здесь смена 
    # разрешения), то мы выполняем это до DirectImport
    def before_direct_import(self):
        loadPrcFileData("", "win-size 1024 768")
    
    # После DirectImport можно пользоваться стандартными пандовскими 
    # средствами - loader, render и т.п.
    def after_direct_import(self):
        # Мы не переопределяли процедуру приёма настроек из конфига
        # set_start_settings, поэтому процедура базового класса 
        # записала словарь в self.settings, откуда мы и попытаемся 
        # прочитать нужное нам значение
        n = 5
        if self.settings.has_key("num"):
            try:
                n = int(self.settings["num"])
            except ValueError:
                print "\nWARNING: Config contain incorrect value."
        # Просто грузим и располагаем случайным образом нужное 
        # количество smiley. Smiley валяется в стандартной папке
        # моделей панды, поэтому часто используется как пробная модель.
        for i in xrange(n):
            np = loader.loadModel("smiley")
            np.reparentTo(render)
            np.setPos(randrange(-20,20),randrange(-20,20),randrange(5,40),)
            # ----------------------------------------
            # Обратите внимание - ссылка на модель не сохраняется - на 
            # статичные модели это не повлияет, однако если использовать
            # Actor, то мы не увидим анимации, т.к. Actor - питоновская 
            # надстройка и сборщик мусора удалит его, останется только 
            # статика. Впрочем, это не относится непосредственно к 
            # разработке компонента, а является особенностью панды, о 
            # чём более подробно написано в соотв. документации.
